iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
1
Software Development

iOS 從 Objective-c 進化為 Swift 的 30天之旅系列 第 17

[Day 17] Swift 繼承 新手簡易範例

  • 分享至 

  • xImage
  •  

前言

繼承在我的概念中
可以繼承某一個class後
使用該class所有變數以及方法
且可改變該變數或複寫方法
簡單來說就是這樣

繼承開始

新增主要的Class

新增一個TestClass
讓別人繼承
裡面宣告如下

class TestClass {
    var money = 1
    var overriding = 1
    var information: String{
        return "錢為:\(money)元"
    }
    func changeMoney(price:Int) -> Int {
        return 1 * price
    }
}

裡面宣告了兩個變數
以及兩個方法
在主要controller宣告
以及更改的程式碼俗下

let testClass  = TestClass()
testClass.money = 10
print("現在的\(testClass.information)")

得出結論為

現在的錢為:10元

接下來新增可以繼承他的class

class TestOtherClass: TestClass {
    var product = 4
}

這時候TestOtherClass 已經有 TestClass的基因
可以拿他爸的所有東西了
也可以呼叫自己的東西
所以可以來呼叫
用以下程式嗎

let testOtherClass = TestOtherClass()
testOtherClass.money = 1
testOtherClass.product = 3
print("現在的金額\(testOtherClass.money)")

輸出的結果

現在的金額1

如果再新增class繼續繼承TestOtherClass
也是可以使用他爺爺TestClass的所有東西
就是他長輩的東西都可以使用
這邊就不掩飾了

複寫 Overriding

可以繼承父類別
然後改寫父類別方法
再繼續使用

先看之前父類別得方法

class TestClass {
    var money = 1
    var overriding = 1
    var information: String{
        return "現在的錢為:\(money)元"
    }
    func changeMoney(price:Int) -> Int {
        return 1 * price
    }
}

新增class 繼承TestClass
並且使用override 改寫他爸的方法

class OverridingClass: TestClass {
    override func changeMoney(price:Int) -> Int {
        return 1 * price * 2
    }
}

在controller 呼叫

let overridingClass = OverridingClass()
print("現在的金額\(overridingClass.changeMoney(price: 10))")

得出結果就是
子類別所更改的func

現在的金額20

didSet && willSet

在剛剛的OverridingClass
新增一個 override var
可以觀察override
新增前willSet
與新增後didSet

 override var money: Int{
    didSet{
        print(money)
    }

    willSet{
        print(money * 2)
    }
}

在controller呼叫

let overridingClass = OverridingClass()
overridingClass.money = 10

得到的結果
會先進willSet
得到 1 * 2 = 2
然後引入money = 10
跑進didSet
得到 10 * 2 = 2


上一篇
[Day 16] Swift 成本功能部分串接
下一篇
[Day 18] iOS Enum 簡單使用範例
系列文
iOS 從 Objective-c 進化為 Swift 的 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言